package com.rayframework.context.annontion;

import com.rayframework.beans.factory.annotation.RayBean;
import com.rayframework.context.stereotype.RayComponent;

import java.lang.annotation.*;

/**
 * Ray 工程中的配置类
 * 注解 {@link RayBean} 和 {@link RayConfiguration} 一起工作，为了摆脱原先的xml和java config方式
 *
 * @author LiaoYuXing-Ray
 * @version 1.0
 * @createDate 2023/9/19 14:17
 **/
@Target({ElementType.TYPE}) // 该注解可以应用于类、接口（包括注解类型）或enum声明
@Retention(RetentionPolicy.RUNTIME) // 指定该注解在运行时仍然有效
@Documented // 表示该注解将被包含在JavaDoc文档中
@RayComponent
public @interface RayConfiguration {
//    @AliasFor(annotation = Component.class)
    String value() default "";

    /**
     * 如果proxyBeanMethods属性的值为true，则 Ray 容器会将所有被代理的bean的方法调用转发给实际的bean实例；
     * 如果proxyBeanMethods属性的值为false，则 Ray 容器不会对被代理的bean的方法进行任何处理，直接将调用转发给实际的bean实例。
     * 默认情况下，proxyBeanMethods属性的值为true，表示 Ray 容器允许代理bean的方法。
     * 这在某些情况下是有用的，例如当需要对bean的方法进行一些额外的处理时，可以使用代理模式来实现。
     * TODO 暂时未使用
     * 2023/9/20 11:00
     */
    boolean proxyBeanMethods() default true;

}
